package com.tedu.api;

import org.junit.Test;
/**
 * Java万物皆对象-->真的是面向对象-->不全是【八大基本数据类型】
 * 对象【类--创建对象，调用属性、方法】
 * 8个基础数据类型----本质类型---类---包装类【对象.通过点进行调用方法、属性】
 * (右一为包装类)
 * 包装类不可以修改:final修饰类,无法继承
 * 八大包装金刚类方法🐓本通用
 * int          Integer      java.lang     继承Number
 * long         Long         java.lang     继承Number
 * double       Double       java.lang     继承Number
 * short        Short        java.lang     继承Number
 * float        Float        java.lang     继承Number
 * byte         Byte         java.lang     继承Number
 * char         Character    java.lang     继承Object
 * boolean      Boolean      java.lang     继承Object
 *
 */
public class Packing {
    @Test
    public void test(){
         int i=1;//不是面向对象
         Integer a=new Integer(i);//面向对象
         a.toString();
    }

/**
 * 包装类API
 * 抽象类 Number 父类:Integer、Long、Double、Short、Float、Byte
 * xxxValue抽象方法：把包装类转换成基本数据类型方法
 * intValue方法   返回int变量
 * longValue方法   返回long变量
 * doubleValue方法   返回double变量   达波
 * shortValue方法    返回short变量
 * floatValue方法    返回float变量
 * byteValue方法     返回byte变量
 * 把以上6个数据类型转换为包装类，输出基本数据类型
 *
 */
@Test
    public void testValue(){
    //int打包---包装类---取出---从包装类获取基础数据类型
    Integer i=new Integer("123");//创建包装类  打包
    int ikun=i.intValue();//i.(。。。。。。)  转换为包装类   类型转换为int并返回

    Integer t=new Integer("123");//里头必须是数字
    int kun=t.intValue();

    System.out.println("Integer包装类："+(ikun==kun));
    System.out.println("Integer包装类："+i.equals(t));//i.e
    //.equals  对比对象  确定对象是否有值【包装类--实际值】  有实际值  对比
    // 其他5个基础数据类型包装类--打包 拆包

    Long q=new Long("123");
    long q1=q.longValue();
    Long q2=new Long("123");
    long q3=q.longValue();
    System.out.println("long包装类："+(q1==q3));
    System.out.println("long包装类："+q.equals(q));

    Double w=new Double("123");
    double w1=w.doubleValue();
    Double w2=new Double("123");
    double w3=w.doubleValue();
    System.out.println("Double包装类："+(w1==w3));
    System.out.println("Double包装类："+w.equals(w));

    Short a=new Short("123");
    short a1=a.shortValue();
    Short a2=new Short("123");
    short a3=a.shortValue();
    System.out.println("Short包装类："+(a1==a3));
    System.out.println("Short包装类："+a.equals(a));






}
/**
 * xxxValue 抽象方法------六个基础数据的包装类
 *                       包装类.valueOf("对应类型”)
 *                       静态方法【打包，拆包】
 * 打包：对应包装类中存对应类型
 * 拆包：对应包装类，类型，取出
 *
 */
@Test
    public void testValueOf(){
    int i=Integer.valueOf("123"); //类名点出来:静态方法【Number抽象类具体实现】
    double d=Double.valueOf("123.123");
    boolean b=Boolean.valueOf("true");
    char c=Character.valueOf('i');
    float f=Float.valueOf("5");
    byte y=Byte.valueOf("56");


}

/**
 * parseXXX   静态方法【重点：Servlet  JavaWeb】
 * 作用：将字符串转换为对应的类型
 * 参数--字符串---给字符串转换为对应的数据类型
 * 注意：字符串随便写，不可以随便解析成对应类型
 *
 */
@Test
    public void testParseXXX(){
    //1.把基本数据类型转换为字符串方法 2.转换为字符串
    String s=String.valueOf("2");
    //2.把字符串转换为基础数据类型方法   需要解析出来s
    String s2="2x";
    System.out.println(s2+"打桩");//看一下输出值
    //int i=Integer.parseInt(s2);//不能用valueOf了
    String s3="123.123";
    float f=Float.parseFloat(s3);
    String s4="true";
    boolean b=Boolean.parseBoolean(s4);
    String s5="10L";//符合三种类型: Integer Byte Short
    //long l=Long.parseLong(s5);
    String s6="a";//Charavter 字符类型包装类：无法解析
    //byte b1=Byte.parseByte(s6);
    //System.out.println(b1);
    //总结：1.字符类，无法正确解析成对应类型，不存在char字符
    //2.字面量L/F,会认为是一个字符串，解析使用会失败


    }

/**
 * 包装类  自动拆装箱
 * JDK1.5  新特性  2005
 * JDK1.5之前没有自动拆装箱
 *
 */
@Test
    public void test1(){
    //JDK1.5
    Integer in=Integer.valueOf("1");//将输入类型转换为Integer
    int i=in.intValue();//把包装好的类型,基础数据类型取出
    //JDK1.5 之后  定义方法编译器认可，并非JVM虚拟机认可！
    Integer it=1;//装箱
    int is=it;  //拆箱
    //自动拆装箱实际上，把拆箱与装箱步骤交给idea执行



}

}

